import axios from 'axios'
import qs from 'qs'
import $store from '@/store'
import { mobileResultCode, clearCacheAndRelogin } from '@/assets/js/common'
import { Toast } from 'vant'
/**
 * 根据环境，初始化接口默认地址
 */
switch(process.env.NODE_ENV) {
		// 生产环境 
		case 'production':
				axios.defaults.baseURL = window.application.config.productionServer
				break
		// 测试模式
		case 'debug': 		
				axios.defaults.baseURL = ''
				break
		// 开发环境		
		default:
				axios.defaults.baseURL = '/api'
				break
}

// 默认超时时间
axios.defaults.timeout = 10000

// 设置CORS跨域请求携带资源凭证
axios.defaults.withCredentials = true

// 默认请求头
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'

// 对post请求的参数进行转换
axios.defaults.transformRequest = params => qs.stringify(params)

// 请求拦截器
axios.interceptors.request.use(config => {
	// 初始化时userInfo从localStorage中获取，为null
	  if($store.getters.userInfo && $store.getters.userInfo.hasOwnProperty('token')) {
			const token = $store.getters.userInfo.token
			token && (config.headers['token-key'] = token)
		}
		return config

})

// 响应拦截器
axios.interceptors.response.use(response => {
		//  登录拦截，前提建立在三方对接不会出现登录超时的情况下，直接跳转至登录页重新登录 
	  if( response.data.body.code === mobileResultCode.INVALID_LOGIN_INFORMATION ) {
				Toast.fail({message: response.data.body.message})
				clearCacheAndRelogin()
				return romise.reject('登录信息失效')
		}
		return response.data
}, error => {
		if(response) {
				//=> 服务器有响应，此处做异常处理
				switch (response.status) {
						case 401: //=> 权限
								break
						case 403: //=>服务器拒绝执行
								break
				}
		}else {
					//=> 服务器无返回结果
					if(!window.navigator.onLine) {
							// 断网处理： 跳转到断网和谐页
							return
					}
					return Promise.reject(error)
		}
})

/**
 * @description 通用ajax get方式请求
 * @author gsc
 * @date 2021/11/10
 * @export
 * @param url 接口地址
 * @param params	请求参数，需要对象类型，最终会以[?key=value&key=value]形式拼接到url中
 */
export function get(url, params) {
		return new Promise((resolve, reject) => {
							axios.get(url, {
									params
							}).then(response => {
									resolve(response)	
							}).catch(error => {
									reject(error)	
							})
				}
		)
}

/**
 * @description 通用ajax 同步get方式请求
 * @author gsc
 * @date 2021/11/10
 * @export
 * @param url 接口地址
 * @param params	请求参数，需要对象类型，最终会以[?key=value&key=value]形式拼接到url中
 */
 export function unPromiseGet(url, params) {
	return axios.get(url, {
		params
  })
}

/**
 * @description 通用ajax post方式请求
 * @author gsc
 * @date 2021/11/10
 * @export
 * @param url 接口地址
 * @param params 请求参数，需要对象类型，最终会被post请求拦截器中的qs转换后，发送给后端
 * @param options 请求配置， 需要对象类型，
 */
export function post(url, params, options) {
		return new Promise(
					(resolve, reject) => {
								axios.post(url, params, {
										headers: {
												'Content-Type': options&&options.headers? options.headers 
												: 'application/x-www-form-urlencoded;charset=UTF-8'
										}
								}).then(response => {
										resolve(response.data)
								}).catch(error => {
										reject(error.data)
								})
					}
		)
}